//package com.example.springboot.RabbitMQ.BasicOperation;
//
//import com.rabbitmq.client.*;
//import org.springframework.stereotype.Component;
//
//import java.io.IOException;
//import java.util.Map;
//import java.util.concurrent.TimeoutException;
//
//
//@Component
//public class BasicOperation {
//
//    public static ConnectionFactory factory ;
//
//    public static Connection connection;
//
//    public static Channel channel;
//
//    public BasicOperation() throws IOException, TimeoutException {
//
//        this.factory = new ConnectionFactory();
//
//        this.factory.setHost("182.92.221.203");
//        this.factory.setPort(15672);
//        this.factory.setUsername("admin");
//        this.factory.setPassword("GWnbDpFz");
//
//        this.connection = factory.newConnection();
//
//        this.channel = connection.createChannel();
//
//    }
//
//    //创建交换机
//    public BasicOperation createExchange(
//            String exchangeName,
//            BuiltinExchangeType builtinExchangeType,
//            boolean isPersistence,
//            boolean isDelete,
//            Map<String, Object> other
//    ) throws IOException {
//
//        /**
//         * exchangeName 交换机名称
//         * builtinExchangeType 交换机类型：Direct、Fanout、Topic、Headers
//         * isPersistence 交换机元数据是否持久化
//         * isDelete 交换机在没有队列绑定时是否需要删除
//         * other 其他的一些结构化参数，没有是就设null
//         */
//        this.channel.exchangeDeclare(exchangeName,builtinExchangeType,isPersistence,isDelete,other);
//
//        return this;
//    }
//
//    //  创建队列
//    public BasicOperation createQueue(
//            String queueName,
//            boolean isPrivate,
//            boolean isPersistence,
//            boolean isDelete,
//            Map<String, Object> other
//    ) throws IOException {
//
//        /**
//         * queueName 队列名称
//         * isPrivate 队列是不是私有的，如果私有，则只有创建他的应用程序可以消费消息
//         * isPersistence 队列元数据是否持久化
//         * isDelete 队列在没有消费者订阅时是否需要删除
//         * other 其他的一些结构化信息，比如声明死信队列，磁盘队列会用到
//         */
//        this.channel.queueDeclare(queueName,isPrivate,isPersistence,isDelete,other);
//
//        return this;
//    }
//
//    // 绑定队列
//    public void queueBind(
//            String queueName,
//            String exchangeName,
//            String routingKey
//    ) throws IOException {
//
//        /**
//         * queueName 队列名称
//         * exchangeName 交换机名称
//         * routingKey 路由键
//         */
//        this.channel.queueBind(queueName,exchangeName,routingKey);
//
//    }
//
//    // 绑定队列 Header
//    public void queueBind(
//            String queueName,
//            String exchangeName,
//            String routingKey,
//            Map<String,Object> headersMap
//    ) throws IOException {
//
//        /**
//         * queueName 队列名称
//         * exchangeName 交换机名称
//         * routingKey 路由键
//         *
//         */
//        this.channel.queueBind(queueName,exchangeName,routingKey,headersMap);
//
//    }
//
//    //发送消息
//    public void sendMsg(
//            String exchangeName,
//            String routingKey,
//            AMQP.BasicProperties other,
//            String msg
//    ) throws IOException {
//
//        /**
//         * exchangeName 交换机名称
//         * routingKey 路由键
//         * other 其他参数信息
//         * msg 消息体
//         */
//        this.channel.basicPublish(exchangeName,routingKey,other,msg.getBytes());
//
//    }
//
//    public void receiveMsg(String queueName) throws IOException {
//
//        // 接收消息的回调函数
//        DeliverCallback deliverCallback = (consumerTage,message) -> {
//            System.out.println("接收到消息：" + new String(message.getBody()));
//        };
//
//        // 取消消息的中断函数
//        CancelCallback channelCallback = (consumerTage) -> {
//            System.out.println("消费消息被中断");
//        };
//
//        /**
//         * 1.要消费的消息队列
//         * 2.消费成功后是否自动应答
//         * 3.接收消息后的回掉函数
//         * 4.取消消息的中断函数
//         */
//        channel.basicConsume(queueName,true,deliverCallback,channelCallback);
//
//    }
//
//
//    public void close() throws IOException, TimeoutException {
//        channel.close();
//        connection.close();
//    }
//
//}
